package cn.ggy.demo2;

import cn.ggy.demo.Phone;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyPhone2 implements InvocationHandler{

     //目标对象
    private Object target;

    //有参构造
    public ProxyPhone2(Object obj){
        this.target = obj;
    }

    //生成代理对象
    public Object getProxyPhone(){

        //获取类对象
        Class<?> cls = target.getClass();
        //获取目标对象的类加载器
        ClassLoader classLoader = cls.getClassLoader();
        //获取目标对象的接口
        Class<?>[] interfaces = cls.getInterfaces();
        //this指的是实现了InvocationHandler的对象
        Object proxyObj = Proxy.newProxyInstance(classLoader, interfaces, this);

        return proxyObj;
    }

    /**
     *
     * @param proxy  代理对象
     * @param method  目标对象的真实方法
     * @param args  目标对象方法的参数
     * @return
     * @throws Throwable
     */
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("视频质量也不赖");//前置增强
        Object invoke = method.invoke(target, args);

        return invoke;
    }
}
